﻿#include<iostream>
#include<deque>
#include"queue.h"
#include"stack.h"
using namespace std;


//for (declaration : expression)
//{
//    // 循环体
//}
//在上面的语法格式中 declaration 表示遍历声明，在遍历过程中，当前被遍历到的元素会被存储到声明的变量中。
//expression 是要遍历的对象，它可以是 表达式 、容器、数组、初始化列表 等
//如果想对里面的值进行修改的话 还可以加上引用





//适配器模式: 用已有的东西转换出想要的东西 vector list
//模拟器实现栈
void Teststack()
{
	zy::stack<int>st;//想改变底层的实现 就去.h的文件中去修改
	st.push(1);
	st.push(2);
	st.push(3);
	st.push(4);
	st.push(5);
	while (!st.empty())
	{
		cout << st.top() << endl;
		st.pop();
	}
	cout << endl;
}

//模拟实现队列
void Testqueue()
{
	zy::queue<int>q; //想改变底层的实现 就去.h的文件中去修改
	q.push(1);
	q.push(2);
	q.push(3);
	q.push(4);
	q.push(5);
	while (!q.empty())
	{
		cout << q.front() << endl;
		q.pop();
	}
	cout << endl;
}
//deque 双端队列 但是不满足先进先出 从功能上来说 这个东西非常的完美
//兼具了vector 和 list 的优点
//但是它的缺点也是存在的 如果真的完美的话 vector list就会被淘汰了 
void Testdeque()
{
    deque<int>d;
    d.push_back(1);
    d.push_back(2);
    d.push_back(3);
    d.push_back(4);
    d.push_front(10);
    d.push_front(20);
    for (size_t i = 0; i < d.size(); i++)
    {
        cout << d[i] << endl;
    }
}
int main()
{
	Teststack();
	//Testqueue();
	return 0;
}

